import pymongo
from pyecharts.charts import Bar
from pyecharts import options as opts
from pyecharts.globals import ThemeType


db = pymongo.MongoClient('localhost', 27017)
douban = db['doubantop250']
item_info = douban['movietop250']


# 清洗TOP250评分数据排行；
year_list = []
country_list = []
dict_list = {}

# 提取mongodb数据，使用find方法
for i in item_info.find():
    # dict_list[i['name']] = float(i['score'])
    # 把数据库中year里的内容全部加入到year_list中，strip函数去除空白
    year_list.append(i['year'].strip())
    country_list.append(i['country'].strip())

print(year_list)
print(country_list)
year_dict = {}

# year_list中有很多重复的内容，是因为append方法是追加，不负责去重
# 这个for循环用来统计重复年份的数量，并封装成字典
for i in year_list:
    # 综合起来，这行代码的作用是：检查字典year_dict中是否包含键i，如果包含，则将其对应的值增加1；
    # 如果不包含，则在字典中创建这个键，并将其值设为1(0 + 1)。这通常用于统计某个元素（在这里是i）出现的次数。
    year_dict[i] = year_dict.get(i, 0) + 1

print(year_dict)
# year_dict是乱序的，下面按照年份进行排序
# list_year是列表类型，这个列表中的每一个元素都是一个元组(年份, 数量)
list_year = sorted(year_dict.items(), key=lambda item: item[0])


# ------------------------------绘图------------------------------------
bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK, width='1200px', height='600px'))
bar.add_xaxis([x[0] for x in list_year])
bar.add_yaxis('上映电影数量', [x[1] for x in list_year], category_gap="40%")
bar.reversal_axis()
bar.set_global_opts(
    xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=12)),
    title_opts=opts.TitleOpts(title="xxx年电影上映数量", subtitle="数据来源：https://movie.douban.com/top250?start=0&filter=")
)
bar.set_series_opts(
    label_opts=opts.LabelOpts(is_show=False),
    markpoint_opts=opts.MarkPointOpts(
        data=[
            opts.MarkPointItem(type_="max", name="最大值"),
            opts.MarkPointItem(type_="min", name="最小值")
        ]
    )
)

# 在网页上渲染
bar.render('my_year_movie_num.html')